package com.wei.czz.framework.blog.service;

import com.wei.czz.common.dto.blog.comment.CommentDto;
import com.wei.czz.common.tool.PageDto;
import com.wei.czz.common.vo.blog.BlogCommentVo;
import com.wei.czz.common.vo.blog.comment.CommentFormVo;
import com.wei.czz.framework.blog.entity.BlogCommentEntity;

import java.util.Collection;
import java.util.Date;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2021-08-24 22:48:40
 * className: BlogCommentService 博客评论操作请求服务接口
 * version: 1.0
 * description:
 */
public interface BlogCommentService {

    /**
     * 保存博客作者评论博客信息操作
     * @param commentVo 博客评论信息请求参数对象
     */
    Long saveComment(BlogCommentVo commentVo);

    /**
     * 保存用户评论博客信息
     * @param commentVo 封装用户评论信息的对象
     */
    CommentDto saveOneComment(BlogCommentVo commentVo);

    /**
     * 保存博客相互评论信息
     * @param blogCommentVo 封装用户互相评论信息的对象
     */
    CommentDto saveChildComment(BlogCommentVo blogCommentVo);

    /**
     * 分页查询博客评论列表操作
     * @param commentFormVo 博客评论请求表单对象
     * @return 分页查询结果
     */
    PageDto<CommentDto> getCommentList(CommentFormVo commentFormVo);

    /**
     * 分页获取第一级博客评论列表
     * @param blogCommentVo 请求参数封装对象
     */
    PageDto<CommentDto> getOneCommentList(BlogCommentVo blogCommentVo);

    /**
     * 分页获取博客第一级评论下自评论列表
     * @param blogCommentVo 封装博客第一级评论下子评论列表请求参数的对象
     */
    List<CommentDto> getChildrenCommentList(BlogCommentVo blogCommentVo);

    /**
     * 用户查询博客评论详细信息操作
     * @param commentId 博客评论主键
     * @return 博客评论信息
     */
    BlogCommentEntity getCommentInfo(Long commentId);

    /**
     * 判断博客评论是否存在
     * @param commentIdCollection 博客评论主键集合
     */
    void existBlogComment(Collection<Long> commentIdCollection);

    /**
     * 获取博客评论数量操作
     * @param blogId 博客主键
     * @return 博客评论数量
     */
    Long getBlogCommentCount(Long blogId);

    /**
     * 根据评论区块id，更新区块id关联的博客第一级评论的被回复数值
     * @param blockId      评论区块id
     * @param parentUserId 被评论的用户id（此方法）
     * @param num          变化值（val为1时，评论数加一。val为-1时，评论数减一）
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int updateOneCommentReplyNum(Long blockId, Integer parentUserId, Integer num);

    /**
     * 根据博客评论id，更新博客评论的点赞数值
     * @param commentId    博客评论id
     * @param num          变化值（val为1时，点赞数加一。val为-1时，点赞数减一）
     * @param updateTime   更新时间
     * @param updateUserId 操作更新的用户id
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int updateBlogCommentLikeNum(Long commentId, Integer num, Date updateTime, Long updateUserId);

    /**
     * 用户点赞/取消点赞博客评论操作
     * @param commentFormVo 博客评论请求表单对象
     */
    void updateCommentLike(CommentFormVo commentFormVo);

    /**
     * 用户置顶/取消置顶博客评论操作
     * @param commentFormVo 博客评论请求表单对象
     */
    void updateCommentTopFlag(CommentFormVo commentFormVo);

    /**
     * 用户隐藏/取消隐藏博客评论操作
     * @param commentFormVo 博客评论请求表单对象
     */
    void updateCommentHideFlag(CommentFormVo commentFormVo);

    /**
     * 用户批量隐藏/取消隐藏博客评论操作
     * @param commentIdList 评论主键列表
     * @param hideFlag      博客评论最新隐藏状态
     */
    void batchUpdateCommentHideFlag(List<Long> commentIdList, Integer hideFlag);

}

